//
//  NSString+MZCategory.h
//  MZToolkitDemo
//
//  Created by 沈家林 on 2017/11/1.
//  Copyright © 2017年 Chris Yang. All rights reserved.
//

#import <Foundation/Foundation.h>

/* Regex */
#define mzRegexStrPassword      @"[0-9a-zA-Z_]{6,16}"               /* 限制数字字母下划线，长度6--16位 */
#define mzRangeStrIdentify      @"^(\\d{14}|\\d{17})(\\d|[xX])$"    /* 身份证简易校验 */
#define mzRegexStrMobildNum     @"^1\\d{10}"                        /* 手机号简易校验，1开头，11位 */
#define mzRegexStrBankCard      @"[0-9]{16,19}"                     /* 银行卡简易校验，纯数字，16--19位 */
#define mzRegexStrNumberOnly    @"[0-9]*"                           /* 纯数字 */
#define mzRegexStrAmount        @"[1-9]\\d{0,7}(\\.\\d{0,2})?"         /* 金额数字限制，整数最多8位、小数最多2位、不能是0开头、只有一个小数点*/

@interface NSString (MZCategory)

#pragma mark 字符串检查

- (BOOL)mzMatchRegexStr:(NSString *)regexStr;   /* 串类型检查（基础） */

#pragma mark - 简单转化

- (NSString *)mzNoSpaceString;      /* 清除空格 */
/*
 将表情符号替换成指定字符串
 */
- (NSString *)mzStringByReplacingEmojiWithString:(NSString *)string;

/*
 pragma mark - 每隔unit个字符，加一个空格
 */
- (NSString *)mzAddSpaceWithUnit:(NSUInteger)unit;

#pragma mark - 数字串规格化

/* 【默认】如: 12334.34
 * 1. 展示2位小数
 * 注：number输入支持NSDecimalNumber，并可以保持其精度
 */
+ (NSString *)mzDefaultValueStringWithNumber:(NSNumber *)number;
+ (NSString *)mzDefaultValueStringWithValueString:(NSString *)valueStr;

/* 【标准1】如: 12,342.42
 * 1. 展示2位小数
 * 2. 每3位添加一个逗号分隔符
 * 注：number输入支持NSDecimalNumber，并可以保持其精度
 */
+ (NSString *)mzStdSeperateValueStringWithNumber:(NSNumber *)number;
+ (NSString *)mzStdSeperateValueStringWithValueString:(NSString *)valueStr;

/* 【标准2】如: 12,342
 * 1.没有小数部分
 * 2.每3位添加一个逗号分隔符
 */
+ (NSString *)mzStdSeperateValueStringWithoutDecimalWithNumber:(NSNumber *)number;
+ (NSString *)mzStdSeperateValueStringWithoutDecimalWithValueString:(NSString *)valueStr;


/* 【人民币】如: 12,342.42元
 * 1. 展示2位小数
 * 2. 每3位添加一个逗号分隔符
 * 3. 末尾加上单位"元"
 * 注：number输入支持NSDecimalNumber，并可以保持其精度
 */
+ (NSString *)mzRmbValueStringWithNumber:(NSNumber *)number;

/* 【百分比】如：37.62%
 * 1. 展示2位小数
 * 2. 末尾加上单位百分号("%")
 * 注：number输入支持NSDecimalNumber，并可以保持其精度
 */
+ (NSString *)mzPercentStringWithNumber:(NSNumber *)number;

/* 【百分比范围】如：37.62%~45.33%
 * 1. 单个百分比展示2位小数
 * 2. 单个末尾加上单位百分号("%")
 * 3. max为空或min >= max时，只展示Min
 * 4. min < max时展示x.xx%~y.yy%
 * 注：number输入支持NSDecimalNumber，并可以保持其精度
 */
+ (NSString *)mzPercentStringWithMinNumber:(NSNumber *)minNum maxNumber:(NSNumber *)maxNum;

#pragma mark - 其他

/* 安全手机号
 * 1. 从第四个数字起，中间4位使用*代替
 * 2. 小于11位的数字串不进行处理
 */
+ (NSString *)mzSafePhoneNumberStringWithString:(NSString *)numberStr;

/* 安全身份证号
 * 1. 从第7个数字其，中间8位使用*代替
 * 2. 小于14位的数字串不进行处理
 */
+ (NSString *)mzSafeIdNumberStringWithString:(NSString *)idNumberStr;

/* 自定义行间距串
 * 1. 可自由设置字符串的行间距
 */
+ (NSAttributedString *)mzLineSpaceStringWithString:(NSString *)inputStr
                                          lineSpace:(float)lineSpace;

@end
